home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 1.iso
/
HENSA
/
MATHS
/
PLPLOT
/
PLPLOT.ZIP
/
examples
/
C
/
x09c.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-06-30
|
4KB
|
165 lines
/* $Id: x09c.c,v 1.10 1994/06/30 17:57:41 mjl Exp $
* $Log: x09c.c,v $
* Revision 1.10 1994/06/30 17:57:41 mjl
* All C example programs: made another pass to eliminate warnings when using
* gcc -Wall. Lots of cleaning up: got rid of includes of math.h or string.h
* (now included by plplot.h), eliminated redundant casts, put in more
* uniform comments, and other minor changes.
*
* Revision 1.9 1994/03/30 07:21:53 mjl
* Changes to all C example programs: special handling for malloc re: header
* files eliminated, include of stdio.h and stdlib.h eliminated (now done
* by plplot.h), include of "plplot.h" changed to <plplot.h> to enable
* simpler builds by the general user, some cleaning up also.
*/
/* x09c.c
Contour plot demo.
*/
#include <plplot.h>
#define XPTS 35 /* Data points in x */
#define YPTS 46 /* Datat points in y */
#define XSPA 2./(XPTS-1)
#define YSPA 2./(YPTS-1)
static PLFLT clevel[11] =
{-1., -.8, -.6, -.4, -.2, 0, .2, .4, .6, .8, 1.};
/* Utility macros */
#ifndef PI
#define PI 3.1415926535897932384
#endif
/* Transformation function */
PLFLT tr[6] =
{XSPA, 0.0, -1.0, 0.0, YSPA, -1.0};
void
mypltr(PLFLT x, PLFLT y, PLFLT *tx, PLFLT *ty, void *pltr_data)
{
*tx = tr[0] * x + tr[1] * y + tr[2];
*ty = tr[3] * x + tr[4] * y + tr[5];
}
/*----------------------------------------------------------------------*\
* main
*
* Does several contour plots using different coordinate mappings.
\*----------------------------------------------------------------------*/
int
main(int argc, char *argv[])
{
int i, j;
PLFLT xx, yy, argx, argy, distort;
static PLINT mark = 1500, space = 1500;
PLFLT **z, **w;
PLFLT xg1[XPTS], yg1[YPTS];
PLcGrid cgrid1;
PLcGrid2 cgrid2;
/* Parse and process command line arguments */
(void) plParseInternalOpts(&argc, argv, PL_PARSE_FULL);
/* Initialize plplot */
plinit();
/* Set up function arrays */
plAlloc2dGrid(&z, XPTS, YPTS);
plAlloc2dGrid(&w, XPTS, YPTS);
for (i = 0; i < XPTS; i++) {
xx = (double) (i - (XPTS / 2)) / (double) (XPTS / 2);
for (j = 0; j < YPTS; j++) {
yy = (double) (j - (YPTS / 2)) / (double) (YPTS / 2) - 1.0;
z[i][j] = xx * xx - yy * yy;
w[i][j] = 2 * xx * yy;
}
}
/* Set up grids */
cgrid1.xg = xg1;
cgrid1.yg = yg1;
cgrid1.nx = XPTS;
cgrid1.ny = YPTS;
plAlloc2dGrid(&cgrid2.xg, XPTS, YPTS);
plAlloc2dGrid(&cgrid2.yg, XPTS, YPTS);
cgrid2.nx = XPTS;
cgrid2.ny = YPTS;
for (i = 0; i < XPTS; i++) {
for (j = 0; j < YPTS; j++) {
mypltr((PLFLT) i, (PLFLT) j, &xx, &yy, NULL);
argx = xx * PI/2;
argy = yy * PI/2;
distort = 0.4;
cgrid1.xg[i] = xx + distort * cos(argx);
cgrid1.yg[j] = yy - distort * cos(argy);
cgrid2.xg[i][j] = xx + distort * cos(argx) * cos(argy);
cgrid2.yg[i][j] = yy - distort * cos(argx) * cos(argy);
}
}
/* Plot using identity transform */
plenv(-1.0, 1.0, -1.0, 1.0, 0, 0);
plcol(2);
plcont(z, XPTS, YPTS, 1, XPTS, 1, YPTS, clevel, 11, mypltr, NULL);
plstyl(1, &mark, &space);
plcol(3);
plcont(w, XPTS, YPTS, 1, XPTS, 1, YPTS, clevel, 11, mypltr, NULL);
plstyl(0, &mark, &space);
plcol(1);
pllab("X Coordinate", "Y Coordinate", "Streamlines of flow");
/* Plot using 1d coordinate transform */
plenv(-1.0, 1.0, -1.0, 1.0, 0, 0);
plcol(2);
plcont(z, XPTS, YPTS, 1, XPTS, 1, YPTS, clevel, 11,
pltr1, (void *) &cgrid1);
plstyl(1, &mark, &space);
plcol(3);
plcont(w, XPTS, YPTS, 1, XPTS, 1, YPTS, clevel, 11,
pltr1, (void *) &cgrid1);
plstyl(0, &mark, &space);
plcol(1);
pllab("X Coordinate", "Y Coordinate", "Streamlines of flow");
/* Plot using 2d coordinate transform */
plenv(-1.0, 1.0, -1.0, 1.0, 0, 0);
plcol(2);
plcont(z, XPTS, YPTS, 1, XPTS, 1, YPTS, clevel, 11,
pltr2, (void *) &cgrid2);
plstyl(1, &mark, &space);
plcol(3);
plcont(w, XPTS, YPTS, 1, XPTS, 1, YPTS, clevel, 11,
pltr2, (void *) &cgrid2);
plstyl(0, &mark, &space);
plcol(1);
pllab("X Coordinate", "Y Coordinate", "Streamlines of flow");
plend();
free((void *) w);
free((void *) z);
exit(0);
}